// import areas from '@/util/areacommon.js'
/*
 * 判断obj是否为一个整数
 */
function isInteger(obj) {
	return Math.floor(obj) === obj
}

/*
 * 将一个浮点数转成整数，返回整数和倍数。如 3.14 >> 314，倍数是 100
 * @param floatNum {number} 小数
 * @return {object}
 *   {times:100, num: 314}
 */
function toInteger(floatNum) {
	var ret = {
		times: 1,
		num: 0
	}
	if (isInteger(floatNum)) {
		ret.num = floatNum
		return ret
	}
	var strfi = floatNum + ''
	var dotPos = strfi.indexOf('.')
	var len = strfi.substr(dotPos + 1).length
	var times = Math.pow(10, len)
	var intNum = parseInt(floatNum * times + 0.5, 10)
	ret.times = times
	ret.num = intNum
	return ret
}

/*
 * 核心方法，实现加减乘除运算，确保不丢失精度
 * 思路：把小数放大为整数（乘），进行算术运算，再缩小为小数（除）
 *
 * @param a {number} 运算数1
 * @param b {number} 运算数2
 * @param digits {number} 精度，保留的小数点数，比如 2, 即保留为两位小数
 * @param op {string} 运算类型，有加减乘除（add/subtract/multiply/divide）
 *
 */
function operation(a, b, op, digits, ) {
	var o1 = toInteger(a)
	var o2 = toInteger(b)
	var n1 = o1.num
	var n2 = o2.num
	var t1 = o1.times
	var t2 = o2.times
	var max = t1 > t2 ? t1 : t2
	var result = null
	switch (op) {
		case 'add':
			if (t1 === t2) { // 两个小数位数相同
				result = n1 + n2
			} else if (t1 > t2) { // o1 小数位 大于 o2
				result = n1 + n2 * (t1 / t2)
			} else { // o1 小数位 小于 o2
				result = n1 * (t2 / t1) + n2
			}
			return result / max
		case 'subtract':
			if (t1 === t2) {
				result = n1 - n2
			} else if (t1 > t2) {
				result = n1 - n2 * (t1 / t2)
			} else {
				result = n1 * (t2 / t1) - n2
			}
			return result / max
		case 'multiply':
			result = (n1 * n2) / (t1 * t2)
			return result
		case 'divide':
			result = (n1 / n2) * (t2 / t1)
			return result
	}
}

function strByteLen(val) {
	var Zhlength = 0; // 全角
	var Enlength = 0; // 半角
	for (var i = 0; i < val.length; i++) {
		if (val.substring(i, i + 1).match(/[^\x00-\xff]/ig) != null)
			Zhlength += 1;
		else
			Enlength += 1;
	}
	return (Zhlength * 2) + Enlength;
}

//判断公司名称是否是全名
function companyName(s) {
	var str_key = "办事处,公司,小学,中学,学校,中心,局,银行,分行,社,总队,处,电站,院,酒店,矿,政府,所,部,协会,厂,场,集团,馆,行,会,署,网";
	var key = str_key.split(",");
	var r = 0;
	for (var i = 0; i < str_key.length; i++) {
		if (s.indexOf(key[i]) > -1) {
			return true;
		}
	}
	return false;
}

/**
 *
 * @param {*} name
 * @returns
 * 点击过的设置为灰色
 * localstorage可存储：5*1024*1024=5242880,id长度：220406494约9个字符(b)),约能存524288个id
 */
const storageFn = function(name) {
	return {
		set: function(val) {
			let old = uni.getStorageSync(name);
			if (old) {
				// 只存储最新添加的1000个id
				const arr = old.split(",");
				if (arr.length >= 1000) {
					old = arr.slice(-1, 1000).join(',')
				}
				uni.removeStorageSync(name);
				uni.setStorageSync(name, old + ',' + val);
			} else {
				uni.setStorageSync(name, val + '');
			}
		},
		get: function() {
			return uni.getStorageSync(name);
		}
	}
};

const clickedObj = {
	bx: storageFn('clickedbx'),
	pro: storageFn('clickedpro')
}

// // 拆分所要标红的关键词
// const keyslist = (keys) => {
//   let list = [];
//     if (keys.indexOf(",") !== -1) {
//       list = keys.split(",");
//     } else {
//       list = keys.split(" ");
//     }
//     // 如果有 " " + 则拆分成单独的关键词
//     // " " + |
//     for (var i = 0; i <= list.length - 1; i++) {
//       [" ", "+", "|"].map((item) => {
//         if (list[i].indexOf(item) !== -1) {
//           const arr = list[i].split(item);
//           list.splice(i, 1);
//           list = list.concat(arr);
//         }
//       });
//     }
//     // console.log(1, list);

//     // 过滤重复数据
//     const res = new Map();
//     list = list.filter((y) => {
//       // const reg = new RegExp("[+textclassred]");
//       // if (reg.test(y)) {
//       //   return false;
//       // }
//       if (!res.has(y)) {
//         res.set(y);
//         return true;
//       }
//     });
//     // console.log(2, list);
//     return list;
// };

// 拆分所要标红的关键词
const keyslist = (keys) => {
	let list = keys.split(/[,，|\s]/);
	
	// 过滤重复数据
	const arr =[]
	list.map(item=>{
		if(arr.indexOf(item) === -1){
			arr.push(item)
		}
	})
	return arr;
};

/**
 * @description 格式化时间
 * @param {String|Number} dateTime 需要格式化的时间戳
 * @param {String} fmt 格式化规则 yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合 默认yyyy-mm-dd
 * @returns {string} 返回格式化后的字符串
 */
const timeFormat = (dateTime = null, formatStr = 'yyyy-mm-dd') => {
	let date
	// 若传入时间为假值，则取当前时间
	if (!dateTime) {
		date = new Date()
	}
	// 若为unix秒时间戳，则转为毫秒时间戳（逻辑有点奇怪，但不敢改，以保证历史兼容）
	else if (/^\d{10}$/.test(dateTime.toString().trim())) {
		date = new Date(dateTime * 1000)
	}
	// 若用户传入字符串格式时间戳，new Date无法解析，需做兼容
	else if (typeof dateTime === 'string' && /^\d+$/.test(dateTime.trim())) {
		date = new Date(Number(dateTime))
	}
	// 其他都认为符合 RFC 2822 规范
	else {
		// 处理平台性差异，在Safari/Webkit中，new Date仅支持/作为分割符的字符串时间
		date = new Date(
			typeof dateTime === 'string' ?
			dateTime.replace(/-/g, '/') :
			dateTime
		)
	}

	const timeSource = {
		'y': date.getFullYear().toString(), // 年
		'm': (date.getMonth() + 1).toString().padStart(2, '0'), // 月
		'd': date.getDate().toString().padStart(2, '0'), // 日
		'h': date.getHours().toString().padStart(2, '0'), // 时
		'M': date.getMinutes().toString().padStart(2, '0'), // 分
		's': date.getSeconds().toString().padStart(2, '0') // 秒
		// 有其他格式化字符需求可以继续添加，必须转化成字符串
	}

	for (const key in timeSource) {
		const [ret] = new RegExp(`${key}+`).exec(formatStr) || []
		if (ret) {
			// 年可能只需展示两位
			const beginIndex = key === 'y' && ret.length === 2 ? 2 : 0
			formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex))
		}
	}

	return formatStr
}

export {
	operation,
	strByteLen,
	companyName,
	clickedObj,
	keyslist,
	timeFormat
};